/*
 * @Description: 用户模块控制器
 */
const Users = require("../model/controller/userCtrl");
const { sendMessage } = require("./utils/getSendResult");
const {checkUserInfo,checkUserName} = require("./utils/checkUserInfo")
const jwt = require("./utils/jwt");

module.exports = {
  /**
   * 用户登录
   */
  async Login(req, res) {
    let { userName, password } = req.body;

    //校验用户信息是否符合规则
    let ctx={};
    if (!checkUserInfo(ctx, userName, password)) {
      res.send(ctx.result);
      return;
    }

    // 连接数据库根据用户名和密码查询用户信息
    let user = await Users.Login(userName, password);

    // 结果集长度为0则代表没有该用户
    if (!user) {
      res.send(sendMessage("004", "用户名或密码错误"));
      return;
    }

    // 数据库设置用户名唯一
      const loginUser = {
        user_id: user.user_id,
        userName: user.userName,
      }


      //  保存用户信息到jwt
      jwt.publish(res, undefined, loginUser);

      let result = {
        code: "001",
        user: loginUser,
        msg: "登录成功",
      };
      res.send(result);
      return;
  },
  /**
   * 查询是否存在某个用户名,用于注册时前端校验
   */
  async FindUserName(req,res) {
    let { userName } = req.body;

     // 校验用户名是否符合规则
    let ctx={};
    if (!checkUserName(ctx, userName)) {
      res.send(ctx.result);
      return;
    }

    // 连接数据库根据用户名查询用户信息
    let user = await Users.FindUserName(userName);
    // 结果集长度为0则代表不存在该用户,可以注册
    if (!user) {
      let result = {
        code: "001",
        msg: "用户名不存在，可以注册",
      };
      res.send(result);
    }else{
      let result = {
        code: "004",
        msg: "用户名已经存在，不能注册",
      };
      res.send(result);

    }
    return;
  },
  /**
   * 注册
   */
  async Register(req, res) {
    let { userName, password } = req.body;

    // 校验用户信息是否符合规则
    let ctx = {};
    if (!checkUserInfo(ctx, userName, password)) {
      res.send(ctx.result);
      return;
    }

    // 连接数据库根据用户名查询用户信息
    // 先判断该用户是否存在
    let user = await Users.FindUserName(userName);

    if (user) {
      res.send(sendMessage("004", "用户名已经存在，不能注册"));
      return;
    }

    // 连接数据库插入用户信息
    let registerResult = await Users.Register(userName, password);
    let code = "500";
    let msg = "未知错误，注册失败";
    if (registerResult) {
      code = "001";
      msg = "注册成功";
    }
    res.send(sendMessage(code, msg));
    return;
  },
};
